package cn.tedu.spring;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

/**
 * Author：程Sir
 * Name： framework
 * Content:
 */
@Controller
@RequestMapping("/emp")  // http://localhost:8080/SpringMvcTest01/emp
public class EmpController {

    @GetMapping("/reg.do")
    public String reg(String username,String password,Model model){

        System.out.println("username="+username);
        System.out.println("password="+password);

        //存储数据到model
//        model.addAttribute("username", username);
//        model.addAttribute("password", password);

        //第二种model存储数据的方式
        Map<String,String> map = new HashMap<>();
        map.put("username", username);
        map.put("password", password);

        model.addAllAttributes(map);
//        return "a"; // 这里的a就是我们要转发数据到的组件。 /templates/a.html
        return "redirect:register.do";
    }
    @GetMapping("/register.do")
    public String register(String username,String password,ModelMap modelMap){

        System.out.println("username="+username);
        System.out.println("password="+password);
        System.out.println("重定向发生了！");
        //存储数据到model
        modelMap.addAttribute("username", username);
        modelMap.addAttribute("password", password);

        //第二种model存储数据的方式
//        Map<String,String> map = new HashMap<>();
//        map.put("username", username);
//        map.put("password", password);
//
//        modelMap.addAllAttributes(map);
        return "a"; // a就是视图的名称！这里的a就是我们要转发数据到的组件。 /templates/a.html

    }

    @GetMapping("/register1.do")
    public ModelAndView register1(String username, String password, ModelAndView modelAndView, HttpServletRequest request){

        System.out.println("username="+username);
        System.out.println("password="+password);
        System.out.println("当前的容器是："+request.getContextPath()); // SpringMvcTest01

        //【1】先将视图名存入ModelAndView对象
//        modelAndView.setViewName("a"); // a就是视图的名称！这里的a就是我们要转发数据到的组件。 /templates/a.html
        /*
            因为类上添加@RequestMapping("/emp") 使得访问时，就具备一定的限制性！
            当设置重定向的访问路径时，一遍要求：
            1. “redirect:” 后面直接不加“/” --- 推荐
            2. "redirect:"后面可以连通:"/emp” 也设置进重定向路径，即：“/emp/register.do"
            3. 当考虑不添加“/"时，“emp/register.do" 这样的重定向路径是不被允许的，应为不管是删除类上的注解还是不删除，都会出错！


         */
        modelAndView.setViewName("redirect:/emp/register.do"); // http://localhost:8080/SpringMvcTest01/register.do
        //【2】将转发的数据存储的ModelAndView对象中
//        modelAndView.addObject("username",username);
//        modelAndView.addObject("password",password);
        // 第二种存储数据的方式
        Map map = new HashMap();
        map.put("username",username);
        map.put("password",password);

        modelAndView.addAllObjects(map);

        // 【3】将modelAndView返回
        return modelAndView; // 这里的a就是我们要转发数据到的组件。 /templates/a.html

    }

    @GetMapping("/hello.do")
    public String hello1(String message, HttpSession session){
        System.out.println("重定向前接受的数据是："+message);
        // 给session中存储数据
        session.setAttribute("message",message);
        return "redirect:hi.do";
    }

    @GetMapping("/hi.do")
    @ResponseBody
    public String hello2( HttpSession session){
        // 给session中存储数据
        String message = (String) session.getAttribute("message");

        System.out.println("重定向后从session中获取的数据是："+message);

        return "重定向：session传值完成！";
    }


}
